`timescale 1ns / 1ps
`include "defines.v"
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2021/12/08 15:47:32
// Design Name: 
// Module Name: if_id
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
//      IF/ID模块的作用是暂存取指阶段取得的指令和对应的指令地址，在下个时钟
//      周期传递到译码阶段
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module if_id(
    input wire clk,
    input wire rst,

    // 来自取指阶段的信号，InstBus表示指令宽度，32位
    input wire[`InstAddrBus] if_pc,
    input wire[`InstBus] if_inst,

    // 对应译码阶段的信号
    output reg[`InstAddrBus] id_pc,
    output reg[`InstBus]    id_inst
    );

    always @ (posedge clk) begin
        if (rst == `RstEnable) begin
            id_pc <= `ZeroWord;         // 复位的时候PC为0
            id_inst <= `ZeroWord;       // 复位时指令也是0，空指令
        end else begin
            id_pc <= if_pc;             // 非复位阶段向下传递指令
            id_inst <= if_inst;
        end
    end
endmodule
